package com.exam.controller;
//用于处理前端请求，并调用后端服务。
import com.exam.entity.Admin;
import com.exam.entity.ApiResult;
import com.exam.service.AdminService;
import com.exam.util.ApiResultHandler;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/admin") // 基础路径为 /admin
//@RestController：表示这是一个RESTful Web服务的控制器。
//@RequestMapping("/admin")：定义了该控制器的基础路径为/admin。

public class AdminController {

    private final AdminService adminService;
//private final AdminService adminService;：声明了一个AdminService类型的成员变量，用于处理业务逻辑。

    @Autowired//@Autowired：自动注入AdminService实例。
    public AdminController(AdminService adminService) {
        this.adminService = adminService;
    }

    // 查询所有管理员
    @GetMapping("/all")
    public ApiResult<List<Admin>> findAll() {
        return ApiResultHandler.success(adminService.findAll());
    }
    //@GetMapping("/all")：处理GET请求，路径为/admin/all。
    //调用adminService.findAll()方法获取所有管理员，并使用ApiResultHandler.success()方法包装结果返回。
    @GetMapping("/{adminId}")
    public ApiResult<Object> findById(@PathVariable("adminId") Integer adminId) {
        Admin admin = adminService.findById(adminId);
        if (admin != null) {
            return ApiResultHandler.success(admin);
        }
        return ApiResultHandler.error("管理员不存在");
    }
//@GetMapping("/{adminId}")：处理GET请求，路径为/admin/{adminId}，其中{adminId}是路径变量。
//使用@PathVariable注解将路径中的adminId绑定到方法参数。
//调用adminService.findById(adminId)方法获取指定ID的管理员，如果存在则返回成功结果，否则返回错误结果。
    @PostMapping("/add")
    public ApiResult<Admin> add(@RequestBody Admin admin) {
        return ApiResultHandler.success(adminService.add(admin));
    }
//@PostMapping("/add")：处理POST请求，路径为/admin/add。
//使用@RequestBody注解将请求体中的JSON数据绑定到Admin对象。
//调用adminService.add(admin)方法添加管理员，并返回成功结果。
    @PutMapping("/update/{adminId}")
    public ApiResult<Admin> update(@PathVariable("adminId") Integer adminId, @RequestBody Admin admin) {
        admin.setAdminId(adminId); // 确保更新的ID正确
        return ApiResultHandler.success(adminService.update(admin));
    }
//@PutMapping("/update/{adminId}")：处理PUT请求，路径为/admin/update/{adminId}。
//使用@PathVariable注解将路径中的adminId绑定到方法参数。
//使用@RequestBody注解将请求体中的JSON数据绑定到Admin对象。
//调用adminService.update(admin)方法更新管理员信息，并返回成功结果。
    @DeleteMapping("/delete/{adminId}")
    public ApiResult<Object> deleteById(@PathVariable("adminId") Integer adminId) {
        adminService.deleteById(adminId);
        return ApiResultHandler.success();
    }
    //@DeleteMapping("/delete/{adminId}")：处理DELETE请求，路径为/admin/delete/{adminId}。
    //使用@PathVariable注解将路径中的adminId绑定到方法参数。
    //调用adminService.deleteById(adminId)方法删除指定ID的管理员，并返回成功结果。
}